package com.ruoyi.common.utils;

import cn.dev33.satoken.secure.BCrypt;

import java.math.BigDecimal;
import java.util.Random;

/**
 * 编号生成
 *
 * @author th
 * @varsion v1.0
 * 2022-03-17 9:17
 */
public class SnCreator {
    enum SnPrefix {
        ORDER("NSYD"),

        GYS("GYS")
        ;

        SnPrefix(String prefix) {
            this.prefix = prefix;
        }

        private String prefix;

        public String getPrefix() {
            return this.prefix;
        }
    }

    /**
     * 随机生成四位数
     *
     * @return
     */
    public static int getRandomNum4() {
        Random r = new Random();
        return r.nextInt(9000) + 1000;
    }

    /**
     * 随机生成订单号 订单少 不需要考虑并发时重复订单的问题
     *
     * @return
     */
    public static String getRandom() {
        String result = "";//定义接收对象
        //引用时间方法
        result += DateUtil.sdfMillisecond(); // 17位
        //调用数学函数生成一个随机数
        Double rand = Math.random() * 1000;

        if (rand < 10) {//因为是随机数  如果说随机数小于 10  会截取索引0到1 的值  （索引是从零开始的）
            result += "00" + rand.toString().substring(0, 1); // 如果是1位的话 怎么三个000拼接成功4位
        } else if (rand < 100) {
            result += "0" + rand.toString().substring(0, 2); // 如果是2位的话 怎么三个00拼接成功4位
        } else {
            result += rand.toString().substring(0, 3);
        }
        return result;
    }

    /**
     * 随机n位数生成
     */
    public static String getRandomCode(int randomLen) {
        Random random = new Random();
        String str = "";
        int num = random.nextInt(new BigDecimal("10").pow(randomLen).intValue());
        //不足randomLen位前面补0
        str = String.format("%0" + randomLen + "d", num);
        return str;
    }


    public static String getBillSn() {
        return SnPrefix.ORDER.getPrefix() + DateUtils.simplicityDateTime() + getRandomCode(6);
    }

    public static String getGysCode() {
        return SnPrefix.GYS.getPrefix() + DateUtils.simplicityDateTime() + getRandomCode(6);
    }

    public static void main(String[] args) {
        System.out.println(getGysCode());
//        String hashpw = BCrypt.hashpw("e10adc3949ba59abbe56e057f20f883e");
//        System.out.println("hashpw = " + hashpw);
    }
}
